import classes.*;

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {

        RegistryObjects registry = new RegistryObjects();
        Scanner scanner = new Scanner(System.in);
        int choose = 0;
        String classForShow = "";

        while (true) {
            System.out.println("\n1. Добавить объект");
            System.out.println("2. Показать все объекты");
            System.out.println("3. Показать объекты по классу");
            System.out.println("4. Сохранить в файл");
            System.out.println("5. Загрузить из файла");
            System.out.println("6. Выход");

            System.out.print("\nINPUT> Выберите действие: ");
            choose = scanner.nextInt();

            switch (choose) {
                case 1:
                    scanner.nextLine();
                    System.out.print("INPUT> Введите тип объекта (земельный участок, частный дом, квартира): ");
                    String typeObject = scanner.nextLine();

                    System.out.print("INPUT> Введите стоимость объекта: ");
                    double my_cost = scanner.nextDouble();

                    EstateObject object = null;

                    switch (typeObject) {
                        case "земельный участок":
                            object = new LandPlot(my_cost);
                            break;
                        case "частный дом":
                            object = new PrivateHome(my_cost);
                            break;
                        case "квартира":
                            object = new Flat(my_cost);
                            break;
                        default:
                            System.out.println("ERROR: Неверный тип объекта.");
                            continue;
                    }

                    registry.addObject(object);
                    System.out.println("INFO: Объект добавлен.");
                    //scanner.nextLine();
                    break;

                case 2:
                    registry.showAllObjects();
                    //scanner.nextLine();
                    break;

                case 3:
                    System.out.print("INPUT> Введите класс для показа (земельный участок, частный дом, квартира): ");
                    scanner.nextLine();
                    classForShow = scanner.nextLine();

                    switch (classForShow) {
                        case "земельный участок":
                            registry.showObjectsByClass(LandPlot.class);
                            break;
                        case "частный дом":
                            registry.showObjectsByClass(PrivateHome.class);
                            break;
                        case "квартира":
                            registry.showObjectsByClass(Flat.class);
                            break;
                        default:
                            System.out.println("ERROR: Неверный класс.");
                    }
                    //scanner.nextLine();
                    break;

                case 4:
                    System.out.print("INPUT> Введите имя файла для сохранения: ");
                    String nameSaveFile = scanner.next();
                    registry.saveInFile(nameSaveFile);
                    System.out.println("INFO: Данные сохранены в файл.");
                    //scanner.nextLine();
                    break;

                case 5:
                    System.out.print("INPUT> Введите имя файла для загрузки: ");
                    String nameUploadFile = scanner.next();
                    registry.uploadFromFile(nameUploadFile);
                    //scanner.nextLine();
                    break;

                case 6:
                    System.out.println("INFO: Выход из программы.");
                    scanner.close();
                    return;

                default:
                    System.out.println("INFO: Неверный выбор. Пожалуйста попробуйте снова.");
            }
        }

    }
}